package LambdaDemo;

/**
 * @Author: ylc
 * @Description:Lambda的延迟执行
 * @Date Created in 2022-05-02 14:34
 */
public class LambdaDemo3 {
    private static void log1(int level, String msg){
        if(level == 1){
            System.out.println(msg);
        }
    }
    private static void log2(int level, MessageBuilder builder){
        if(level == 1){
            System.out.println(builder);
        }
    }

    public static void main(String[] args) {
        String msg1 = "Hello ";
        String msg2 = "World";

        /*
            无论级别是否满足要求，方法的第二个参数，字符串一定会首先被拼接并传入方法内，然后才会进行级别判断。
            如果级别不符合要求，那么字符串的拼接操作就白做了，存在性能浪费
         */
        log1(2,msg1 + msg2);

        /*
            使用Lambda表达式作为参数传递,仅仅是作为参数传递到log2方法中
                只有满足条件,
                    才会调用接口MessageBuilder中的方法builderMessage，进行字符串的拼接
                如果条件不满足,
                    那么MessageBuilder接口中的方法builderMessage也不会执行，拼接字符串的代码也不会执行
                所以不会存在性能的浪费
         */
        log2(2,() -> msg1 + msg2);
    }
}
